package fwmpc.service.bean;

import lombok.Builder;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.ToString;
import lombok.experimental.Accessors;
import lombok.experimental.Tolerate;
import lombok.extern.slf4j.Slf4j;

import java.io.Serializable;
import java.util.HashMap;
import java.util.Map;

/**
 * 类描述:  微信模版消息对象
 *
 * @author 王雷
 * @version 1.0.0
 * @date 2023/2/1 0001 上午 10:13
 */
@Data
@Slf4j
@Builder
@ToString
@Accessors(chain = true)
@EqualsAndHashCode(of = {"templateId"})
public class WxTemplateMessage implements Serializable {
    private static final long serialVersionUID = -4266092223024608534L;

    /**
     * 属性描述：模版ID
     *
     * @date : 2023/2/1 0001 上午 10:15
     */
    private String templateId;

    /**
     * 属性描述：目标OpenID
     *
     * @date : 2023/2/1 0001 上午 10:15
     */
    private String touser;

    /**
     * 属性描述：反馈的URL
     *
     * @date : 2023/2/1 0001 上午 10:16
     */
    private String url;

    /**
     * 属性描述：颜色
     *
     * @date : 2023/2/1 0001 上午 10:16
     */
    private String topcolor;

    /**
     * 属性描述：信息内容描述
     *
     * @date : 2023/2/1 0001 上午 10:19
     */
    private Map<String, WxTemplateItemData> data;

    /**
     * 功能描述：微信模版消息对象
     *
     * @date : 2023/2/1 0001 上午 10:16
     */
    @Tolerate
    public WxTemplateMessage() {
    }

    /**
     * 功能描述：构建默认的推送模版对象
     *
     * @date : 2023/2/1 0001 上午 10:49
     */
    public static WxTemplateMessage giveDefaultBuild() {
        return WxTemplateMessage.builder().topcolor("#000000").data(new HashMap<>(16)).build();
    }

    /**
     * 功能描述：构建默认的推送模版对象
     *
     * @param data         信息内容
     * @param targetOpenId 信息内容
     * @date : 2023/2/1 0001 上午 10:49
     */
    public static WxTemplateMessage giveBuild(Map<String, WxTemplateItemData> data, String targetOpenId, String templateId) {
        return WxTemplateMessage.builder().data(data == null ? new HashMap<>(16) : data).templateId(templateId)
                .touser(targetOpenId).topcolor("#000000").build();
    }

    /**
     * 功能描述：设置信息内容描述
     *
     * @param dataKey            描述信息Key
     * @param wxTemplateItemData 描述信息内容
     * @return 微信模版消息对象
     * @date : 2023/2/1 0001 上午 11:17
     */
    public WxTemplateMessage putData(String dataKey, WxTemplateItemData wxTemplateItemData) {
        this.data = this.data == null ? new HashMap<>(16) : this.data;
        this.data.put(dataKey, wxTemplateItemData);
        return this;
    }

    /**
     * 功能描述：设置信息内容描述
     *
     * @param itemDataMap 描述信息内容
     * @return 微信模版消息对象
     * @date : 2023/2/1 0001 上午 11:17
     */
    public WxTemplateMessage putDataAll(Map<String, WxTemplateItemData> itemDataMap) {
        this.data = this.data == null ? new HashMap<>(16) : this.data;
        itemDataMap = itemDataMap == null ? new HashMap<>(16) : itemDataMap;
        this.data.putAll(itemDataMap);
        return this;
    }
}
